// 自调用函数，开启一个新的局部作用域。防止命名冲突
(function () {
	var score = 0;
  var position = "absolute";
  var element = [];
  function Snack(options) {
    options = options || {};
    // 蛇节的大小
    this.width = options.width || 20;
    this.height = options.height || 20;
    // 蛇移动的方向
    this.direction = options.direction || 'right';
    // 蛇的身体（蛇节） 第一个元素是蛇头
    this.body = [
      { x: 3, y: 2, color: 'red' },
      { x: 2, y: 2, color: 'blue' },
      { x: 1, y: 2, color: 'blue' }
    ];


  }

  // 将蛇渲染到页面上
  Snack.prototype.render = function (map) {
    remove();
    for (var i = 0, len = this.body.length; i < len; i++) {
      
      // 蛇节
      var object = this.body[i];
      var div = document.createElement('div');
      element.push(div);
      map.appendChild(div);
      div.style.width = this.width + 'px';
      div.style.height = this.height + 'px';
      div.style.position = position;
      div.style.left = object.x * this.width + 'px';
      div.style.top = object.y * this.height + 'px';
      div.style.backgroundColor = object.color;
    }

  }

  // 让蛇运动起来
  Snack.prototype.move = function (food,map) {
    // 控制蛇的身体移动（当前蛇节到上一个蛇节的位置）
    for (var i = this.body.length - 1; i > 0; i--) {
      this.body[i].x = this.body[i - 1].x;
      this.body[i].y = this.body[i - 1].y;
    }
    // 控制蛇头的移动
    // 控制蛇移动的方向
    var head = this.body[0];
    switch (this.direction) {
      case "right":
        head.x += 1;
        break;
      case "left":
        head.x -= 1;
        break;
      case 'top':
        head.y -= 1;
        break;
      case "bottom":
        head.y += 1;
        break;  
    }

    // 2.4 判断蛇头是否和食物的坐标重合
    var headX = head.x * this.width;
    var headY = head.y * this.height;
    if(headX === food.x && headY === food.y){
      var last = this.body[this.body.length - 1]
      var obj = {};
      // this.body.push({
      //   x : last.x,
      //   y : last.y,
      //   color : last.color
      // })
      
      extend(last, obj);
      // 对象拷贝
      function extend(parent,child){
        for(var key in parent){
          if(child[key]){
            continue;
          }
          child[key] = parent[key];
        }
      }
      this.body.push(obj)
    // 随机在地图上重新生成食物
      food.render(map);
    }
    // 让蛇增加一节

  }

  // 删除蛇节
  function remove (){
    for(var i = element.length - 1; i >=0; i--){
      element[i].parentNode.removeChild(element[i]);
      element.splice(i,1);
    }
  }

  // 暴露构造函数给外部
  window.Snack = Snack;
})()

// 测试代码
// var map = document.getElementById('map');
// var snack = new Snack();
// snack.render(map);